<?php

class Propiedades_model extends Model {

	private $tableName;
	private $limit;

	public function __construct() {
		parent::__construct();
		$this->load->database();

		$this->limit = $this->config->item("per_page");
		$this->tableName = "propiedades";
	}

	function agregar_propiedad($data) {
		$this->db->insert($this->tableName, $data);
		return $this->db->insert_id();
	}

	function editar_propiedad($data_editable) {

        $data = array(
                'fecha_ingreso' => $data_editable['fecha_ingreso'],
                'tipo_propiedad' => $data_editable['tipo_propiedad'],
                'direccion' => $data_editable['direccion'],
								'referencia' => $data_editable['referencia'],
                'comuna' => $data_editable['comuna'],
                'barrio' => $data_editable['barrio'],
                'dormitorios' => $data_editable['dormitorios'],
                'servicios' => $data_editable['servicios'],
                'banhos' => $data_editable['banhos'],
                'tipo' => $data_editable['tipo'],
								'id_propietario' => $data_editable['id_propietario'],
                'descripcion' => $data_editable['descripcion'],
                'comentarios' => $data_editable['comentarios']
            );

        $this->db->where('id', $data_editable['id']);
		$this->db->update($this->tableName, $data);

	}

    function eliminar_propiedad($id) {
		$this->db->delete('propiedades', array('id' => $id));
	}

	/**
	 *		Query Home Principal
	 */
    function buscar_ids($where, $page = false) {
		$this->db->select("$this->tableName.id as id_propiedad");
		$this->db->join("tasaciones", "propiedades.id = tasaciones.id_propiedad and tasaciones.disponibilidad = 'DISPONIBLE' ");
		$this->db->join("conversiones_monetarias", "tasaciones.unidad = conversiones_monetarias.unidad");
		$this->db->order_by("id_propiedad", "desc");

		if (!empty($where)) {
			$this->db->where($where);
		}

		if ($page !== false) {
			$this->db->limit($this->limit, $page);
		}

		$query = $this->db->get($this->tableName);

		if (0 === $query->num_rows()) {
			return array();
		}

		$ids = array();
		foreach ($query->result_array() as $key => $result) {
			foreach ($result as $k => $v) {
				$ids[] = $v;
			}
		}

		return $ids;
	}

	/**
	 * retorna una propiedad, por arriba
	 *
	 * @param <type> $id_propiedad
	 * @return <type>
	 */
	function buscar_propiedad($id_propiedad) {
		$this->db->where("id", $id_propiedad);
		$query = $this->db->get($this->tableName);

		if ($query->num_rows() == 0) {
			return array();
		}

		$propiedad = $query->row_array();
		$id_propietario = $propiedad["id_propietario"];

		$propiedad["tasacion"] = $this->datos_tasacion_propiedad($id_propiedad);
		$propiedad["propietario"] = $this->datos_propietario_propiedad($id_propietario);
		$propiedad["fotos"] = $this->fotos_para_propiedad($id_propiedad);

		return $propiedad;

	}

	/**
	 * busca todas las propiedades que indique el array pasado como parametro.
	 *
	 * el array, debe contener las ids
	 *
	 * @param <type> $ids
	 */
	function buscar_propiedades($ids) {
		$this->db->where_in("id", $ids);
		$this->db->order_by("orden", "desc");
		$query = $this->db->get($this->tableName);

		$listado = array();

		foreach ($query->result_array() as $propiedad) {
			$id_propiedad = $propiedad["id"];
			$id_propietario = $propiedad["id_propietario"];

			$propiedad["tasacion"] = $this->datos_tasacion_propiedad($id_propiedad);
			$propiedad["propietario"] = $this->datos_propietario_propiedad($id_propietario);
			$propiedad["fotos"] = $this->fotos_para_propiedad($id_propiedad);

			$listado[] = $propiedad;
		}

		return $listado;
	}

	/**
	 * esta funcion retorna las propiedades destacadas en home
	 */
	public function listar_destacadas($page = 0) {
		$where["seccion"] = "DESTACADA EN HOME";
		return $this->buscar($where, $page);
	}

	/**
	 * retorna el numero de propiedaes destacadas
	 */
	public function contar_destacadas() {
		$where["seccion"] = "DESTACADA EN HOME";
		$ids = $this->buscar_ids($where);
		return count($ids);
	}

	/**
	 * busca propiedades que conincidan con una clausula where pasada en forma de array
	 *
	 * @param <type> $where
	 * @return <type>
	 */
	function buscar($where, $page = false) {
		$ids = $this->buscar_ids($where, $page);

		if (empty($ids)) {
			return array();
		}

		$this->db->where_in("id", $ids);
		$this->db->order_by("id", "desc");
		$query = $this->db->get($this->tableName);

		$listado = array();

		foreach ($query->result_array() as $propiedad) {
			$id_propiedad = $propiedad["id"];
			$id_propietario = $propiedad["id_propietario"];

			$propiedad["tasacion"] = $this->datos_tasacion_propiedad($id_propiedad);
			$propiedad["propietario"] = $this->datos_propietario_propiedad($id_propietario);
			$propiedad["fotos"] = $this->fotos_para_propiedad($id_propiedad);

			$listado[] = $propiedad;
		}

		return $listado;
	}

	/**
	 * cuenta de acuerdo al where
	 */
	function contar($where) {
		$ids = $this->buscar_ids($where);
		return count($ids);
	}

	/*
	 * cuenta todas las propiedades en la tabla
	 */
	public function contar_todas() {
		$this->db->from($this->tableName);
		$this->db->join("tasaciones", "propiedades.id = tasaciones.id_propiedad and tasaciones.disponibilidad = 'DISPONIBLE' ");
		$this->db->join("conversiones_monetarias", "tasaciones.unidad = conversiones_monetarias.unidad");
		$this->db->order_by("orden", "desc");

		return $this->db->count_all_results();
	}

	/**
	 * retorna el numero de propiedades que pertenecen a un propietario,
	 * esto sirve para saber si el propietario ya no sirve de nada.
	 */
	public function count_owned_by_id($id_propietario = FALSE) {
		if (FALSE === $id_propietario) {
			return 0;
		}

		$this->db->from($this->tableName);
		$this->db->where("id_propietario", $id_propietario);

		return $this->db->count_all_results();
	}

	public function listar_todas($page = 0) {

		$ids = $this->buscar_ids('', $page);

		if (empty($ids)) {
			return array();
		}

		$this->db->where_in("id", $ids);
		$this->db->order_by("id", "desc");
		$query = $this->db->get($this->tableName);

		if ($query->num_rows() == 0) {
			return array();
		}

		$listado = array();

		foreach ($query->result_array() as $propiedad) {
			$id_propiedad = $propiedad["id"];
			$id_propietario = $propiedad["id_propietario"];

			$propiedad["tasacion"] = $this->datos_tasacion_propiedad($id_propiedad);
			$propiedad["propietario"] = $this->datos_propietario_propiedad($id_propietario);
			$propiedad["fotos"] = $this->fotos_para_propiedad($id_propiedad);

			$listado[] = $propiedad;
		}

		return $listado;

	}

	public function listar_todas_prop_adm($page = 0) {
		$this->db->orderby("id", "desc");
		$this->db->limit($this->limit, $page);

		$query = $this->db->get($this->tableName);

		if ($query->num_rows() == 0) {
			return array();
		}

		$listado = array();

		foreach ($query->result_array() as $propiedad) {
			$id_propiedad = $propiedad["id"];
			$id_propietario = $propiedad["id_propietario"];

			$propiedad["tasacion"] = $this->datos_tasacion_propiedad($id_propiedad);
			$propiedad["propietario"] = $this->datos_propietario_propiedad($id_propietario);
			$propiedad["fotos"] = $this->fotos_para_propiedad($id_propiedad);

			$listado[] = $propiedad;
		}

		return $listado;

	}

	public function contar_todas_prop_adm() {
		$this->db->from($this->tableName);
		$this->db->order_by("id", "id");
		return $this->db->count_all_results();
	}

	/*
	 * retorna los datos en la tabla tasaciones para una propiedad
	 */
	function datos_tasacion_propiedad($id_propiedad) {
		/*
		 * este id, no existe
		 */
		if ($id_propiedad <= 0) {
			return array();
		}

		$this->db->where("id_propiedad", $id_propiedad);
		$result = $this->db->get("tasaciones");

		if ($result->num_rows() == 0) {
			return array();
		}

		return $result->row_array();
	}

	/*
	 * retorna los datos en la tabla propietarios para una propiedad
	 */
	function datos_propietario_propiedad($id_propietario) {
		/*
		 * este id, no existe
		 */
		if ($id_propietario <= 0) {
			return array();
		}

		$this->db->where("id", $id_propietario);
		$result = $this->db->get("propietarios");

		if ($result->num_rows() == 0) {
			return array();
		}

		return $result->row_array();
	}

	function fotos_para_propiedad($id_propiedad) {
		if ($id_propiedad <= 0) {
			return array();
		}

		$this->db->where("id_propiedad", $id_propiedad);
		$result = $this->db->get("imagenes_propiedades");

		if ($result->num_rows() == 0) {
			return array();
		}

		return $result->result_array();
	}

}